home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / zn.c < prev    next >
C/C++ Source or Header  |  2000-05-20  |  20KB  |  493 lines

  1. /***************************************************************************
  2.  
  3.   Capcom System ZN1/ZN2
  4.   =====================
  5.  
  6.   Playstation Hardware with Q sound.
  7.  
  8.   Driver by smf. Currently only qsound is emulated.
  9.  
  10. Notes:
  11.  
  12.   This driver is based on information from the cps1/cps2 qsound driver,
  13.   Miguel Angel Horna & Amuse. It works differently to the cps1/cps2 qsound,
  14.   instead of shared memory two bytes are transferred using an i/o port.
  15.   The 1/240th of a second timer either creates an nmi to tell the z80 there
  16.   is data waiting or otherwise an irq.
  17.  
  18.   The I/O port used on zn1 always appears to be 0xf100. The zn2 games always
  19.   set the bottom eight bits to zero, but the top eight bits are cycled
  20.   0x00 - 0x1f for each access. This is probably to help synchronise the
  21.   command queue. This is not currently emulated as it only uses 8 bit i/o port
  22.   addressing.
  23.  
  24. ***************************************************************************/
  25.  
  26. #include "driver.h"
  27. #include "vidhrdw/generic.h"
  28. #include "cpu/mips/mips.h"
  29. #include "cpu/z80/z80.h"
  30.  
  31. static int qcode;
  32. static int qcode_last;
  33. static int queue_data;
  34. static int queue_len;
  35.  
  36. WRITE_HANDLER( qsound_queue_w )
  37. {
  38.     if( cpu_getstatus( 1 ) != 0 )
  39.     {
  40.         queue_data = data;
  41.         queue_len = 2;
  42.     }
  43. }
  44.  
  45. static int zn_vh_start( void )
  46. {
  47.     return 0;
  48. }
  49.  
  50. static void zn_vh_stop( void )
  51. {
  52. }
  53.  
  54. static void zn_vh_screenrefresh( struct osd_bitmap *bitmap, int full_refresh )
  55. {
  56.     int refresh = full_refresh;
  57.  
  58.     if( queue_len == 0 )
  59.     {
  60.         if( keyboard_pressed_memory( KEYCODE_UP ) )
  61.         {
  62.             qcode=( qcode & 0xff00 ) | ( ( qcode + 0x0001 ) & 0xff );
  63.         }
  64.         if( keyboard_pressed_memory( KEYCODE_DOWN ) )
  65.         {
  66.             qcode=( qcode & 0xff00 ) | ( ( qcode - 0x0001 ) & 0xff );
  67.         }
  68.         if( keyboard_pressed_memory( KEYCODE_RIGHT ) )
  69.         {
  70.             qcode=( ( qcode + 0x0100 ) & 0xff00 ) | ( qcode & 0xff );
  71.         }
  72.         if( keyboard_pressed_memory( KEYCODE_LEFT ) )
  73.         {
  74.             qcode=( ( qcode - 0x0100 ) & 0xff00 ) | ( qcode & 0xff );
  75.         }
  76.         if( qcode != qcode_last )
  77.         {
  78.             qsound_queue_w( 0, qcode );
  79.             qcode_last = qcode;
  80.             refresh = 1;
  81.         }
  82.     }
  83.  
  84.     if( refresh )
  85.     {
  86.             struct DisplayText dt[ 4 ];
  87.             char text1[ 256 ];
  88.             char text2[ 256 ];
  89.             char text3[ 256 ];
  90.  
  91.             strcpy( text1, Machine->gamedrv->description );
  92.             if( strlen( text1 ) > Machine->uiwidth / Machine->uifontwidth )
  93.             {
  94.                 text1[ Machine->uiwidth / Machine->uifontwidth ] = 0;
  95.             }
  96.             sprintf( text2, "QSOUND CODE=%02x/%02x", qcode >> 8, qcode & 0xff );
  97.             if( strlen( text2 ) > Machine->uiwidth / Machine->uifontwidth )
  98.             {
  99.                 text2[ Machine->uiwidth / Machine->uifontwidth ] = 0;
  100.             }
  101.             strcpy( text3, "SELECT WITH RIGHT&LEFT/UP&DN" );
  102.             if( strlen( text3 ) > Machine->uiwidth / Machine->uifontwidth )
  103.             {
  104.                 text3[ Machine->uiwidth / Machine->uifontwidth ] = 0;
  105.             }
  106.             dt[ 0 ].text = text1;
  107.             dt[ 0 ].color = UI_COLOR_NORMAL;
  108.             dt[ 0 ].x = ( Machine->uiwidth - Machine->uifontwidth * strlen( dt[ 0 ].text ) ) / 2;
  109.             dt[ 0 ].y = Machine->uiheight - Machine->uifontheight * 5;
  110.             dt[ 1 ].text = text2;
  111.             dt[ 1 ].color = UI_COLOR_NORMAL;
  112.             dt[ 1 ].x = ( Machine->uiwidth - Machine->uifontwidth * strlen( dt[ 1 ].text ) ) / 2;
  113.             dt[ 1 ].y = Machine->uiheight - Machine->uifontheight * 3;
  114.             dt[ 2 ].text = text3;
  115.             dt[ 2 ].color = UI_COLOR_NORMAL;
  116.             dt[ 2 ].x = ( Machine->uiwidth - Machine->uifontwidth * strlen( dt[ 2 ].text ) ) / 2;
  117.             dt[ 2 ].y = Machine->uiheight - Machine->uifontheight * 1;
  118.             dt[ 3 ].text = 0; /* terminate array */
  119.             displaytext( Machine->scrbitmap, dt, 0, 0 );
  120.     }
  121. }
  122.  
  123. static struct QSound_interface qsound_interface =
  124. {
  125.     QSOUND_CLOCK,
  126.     REGION_SOUND1,
  127.     { 100,100 }
  128. };
  129.  
  130. static WRITE_HANDLER( qsound_banksw_w )
  131. {
  132.     unsigned char *RAM = memory_region( REGION_CPU2 );
  133.     cpu_setbank( 1, &RAM[ 0x10000 + ( ( data & 0x0f ) * 0x4000 ) ] );
  134. }
  135.  
  136. static struct MemoryReadAddress qsound_readmem[] =
  137. {
  138.     { 0x0000, 0x7fff, MRA_ROM },
  139.     { 0x8000, 0xbfff, MRA_BANK1 },  /* banked (contains music data) */
  140.     { 0xd007, 0xd007, qsound_status_r },
  141.     { 0xf000, 0xffff, MRA_RAM },
  142.     { -1 }  /* end of table */
  143. };
  144.  
  145. static struct MemoryWriteAddress qsound_writemem[] =
  146. {
  147.     { 0x0000, 0xbfff, MWA_ROM },
  148.     { 0xd000, 0xd000, qsound_data_h_w },
  149.     { 0xd001, 0xd001, qsound_data_l_w },
  150.     { 0xd002, 0xd002, qsound_cmd_w },
  151.     { 0xd003, 0xd003, qsound_banksw_w },
  152.     { 0xf000, 0xffff, MWA_RAM },
  153.     { -1 }  /* end of table */
  154. };
  155.  
  156. static struct IOReadPort qsound_readport[] =
  157. {
  158.     { 0x00, 0x00, soundlatch_r },
  159.     { -1 }
  160. };
  161.  
  162. static struct GfxDecodeInfo zn_gfxdecodeinfo[] =
  163. {
  164.     { -1 } /* end of array */
  165. };
  166.  
  167. static struct MemoryReadAddress zn_readmem[] =
  168. {
  169.     { 0xbfc00000, 0xc2c80000, MRA_BANK2 },
  170.     { -1 }  /* end of table */
  171. };
  172.  
  173. static struct MemoryWriteAddress zn_writemem[] =
  174. {
  175.     { -1 }  /* end of table */
  176. };
  177.  
  178. int zn_interrupt( void )
  179. {
  180.     if( queue_len == 2 )
  181.     {
  182.         soundlatch_w( 0, queue_data >> 8 );
  183.         queue_len--;
  184.         return nmi_interrupt();
  185.     }
  186.     else if( queue_len == 1 )
  187.     {
  188.         soundlatch_w( 0, queue_data & 0xff );
  189.         queue_len--;
  190.         return nmi_interrupt();
  191.     }
  192.     return interrupt();
  193. }
  194.  
  195. static void zn_init_machine( void )
  196. {
  197.     /* stop CPU1 as it doesn't do anything useful yet. */
  198.     timer_suspendcpu( 0, 1, SUSPEND_REASON_DISABLE );
  199.     /* but give it some memory so it can reset. */
  200.     cpu_setbank( 2, memory_region( REGION_CPU1 ) );
  201.  
  202.     qcode = 0x0400;
  203.     qcode_last = -1;
  204.     queue_len = 0;
  205.     qsound_banksw_w( 0, 0 );
  206. }
  207.  
  208. static struct MachineDriver machine_driver_zn =
  209. {
  210.     /* basic machine hardware */
  211.     {
  212.         {
  213.             CPU_MIPS,
  214.             33000000, /* 33mhz ?? */
  215.             zn_readmem, zn_writemem, 0, 0,
  216.             ignore_interrupt, 1  /* ??? interrupts per frame */
  217.         },
  218.         {
  219.             CPU_Z80 | CPU_AUDIO_CPU,
  220.             8000000,  /* 8mhz ?? */
  221.             qsound_readmem, qsound_writemem, qsound_readport, 0,
  222.             zn_interrupt, 4 /* 4 interrupts per frame ?? */
  223.         }
  224.     },
  225.     60, 0,
  226.     1,
  227.     zn_init_machine,
  228.  
  229.     /* video hardware */
  230.     0x30*8+32*2, 0x1c*8+32*3, { 32, 32+0x30*8-1, 32+16, 32+16+0x1c*8-1 },
  231.     zn_gfxdecodeinfo,
  232.     4096,
  233.     4096,
  234.     0,
  235.  
  236.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
  237.     0,
  238.     zn_vh_start,
  239.     zn_vh_stop,
  240.     zn_vh_screenrefresh,
  241.  
  242.     /* sound hardware */
  243.     SOUND_SUPPORTS_STEREO,0,0,0,
  244.     { { SOUND_QSOUND, &qsound_interface } }
  245. };
  246.  
  247. INPUT_PORTS_START( zn )
  248.     PORT_START      /* IN0 */
  249.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON5 | IPF_PLAYER1 )
  250.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 | IPF_PLAYER2 )
  251.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE )    /* pause */
  252.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE  )    /* pause */
  253.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
  254.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
  255.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 | IPF_PLAYER1 )
  256.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 | IPF_PLAYER2  )
  257.  
  258.     PORT_START      /* DSWA */
  259.     PORT_DIPNAME( 0xff, 0xff, DEF_STR( Unknown ) )
  260.     PORT_DIPSETTING(    0xff, DEF_STR( Off ) )
  261.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  262.  
  263.     PORT_START      /* DSWB */
  264.     PORT_DIPNAME( 0xff, 0xff, DEF_STR( Unknown ) )
  265.     PORT_DIPSETTING(    0xff, DEF_STR( Off ) )
  266.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  267.  
  268.     PORT_START      /* DSWC */
  269.     PORT_DIPNAME( 0xff, 0xff, DEF_STR( Unknown ) )
  270.     PORT_DIPSETTING(    0xff, DEF_STR( Off ) )
  271.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  272.  
  273.     PORT_START      /* Player 1 */
  274.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
  275.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER1 )
  276.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER1 )
  277.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER1 )
  278.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
  279.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
  280.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
  281.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER1 )
  282.  
  283.     PORT_START      /* Player 2 */
  284.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
  285.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
  286.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
  287.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
  288.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  289.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  290.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
  291.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2 )
  292. INPUT_PORTS_END
  293.  
  294. #define CODE_SIZE ( 0x3080000 )
  295.  
  296. ROM_START( rvschool )
  297.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  298.     ROM_LOAD_WIDE_SWAP( "jst-04a", 0x0000000, 0x080000, 0x034b1011 )
  299.     ROM_LOAD_WIDE_SWAP( "jst-05m", 0x0080000, 0x400000, 0x723372b8 )
  300.     ROM_LOAD_WIDE_SWAP( "jst-06m", 0x0480000, 0x400000, 0x4248988e )
  301.     ROM_LOAD_WIDE_SWAP( "jst-07m", 0x0880000, 0x400000, 0xc84c5a16 )
  302.     ROM_LOAD_WIDE_SWAP( "jst-08m", 0x0c80000, 0x400000, 0x791b57f3 )
  303.     ROM_LOAD_WIDE_SWAP( "jst-09m", 0x1080000, 0x400000, 0x6df42048 )
  304.     ROM_LOAD_WIDE_SWAP( "jst-10m", 0x1480000, 0x400000, 0xd7e22769 )
  305.     ROM_LOAD_WIDE_SWAP( "jst-11m", 0x1880000, 0x400000, 0x0a033ac5 )
  306.     ROM_LOAD_WIDE_SWAP( "jst-12m", 0x1c80000, 0x400000, 0x43bd2ddd )
  307.     ROM_LOAD_WIDE_SWAP( "jst-13m", 0x2080000, 0x400000, 0x6b443235 )
  308.  
  309.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  310.     ROM_LOAD( "jst-02",  0x00000, 0x08000, 0x7809e2c3 )
  311.     ROM_CONTINUE(        0x10000, 0x18000 )
  312.     ROM_LOAD( "jst-03",  0x28000, 0x20000, 0x860ff24d )
  313.  
  314.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  315.     ROM_LOAD( "jst-01m", 0x0000000, 0x400000, 0x9a7c98f9 )
  316. ROM_END
  317.  
  318. ROM_START( jgakuen )
  319.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  320.     ROM_LOAD_WIDE_SWAP( "jst-04j", 0x0000000, 0x080000, 0x28b8000a )
  321.     ROM_LOAD_WIDE_SWAP( "jst-05m", 0x0080000, 0x400000, 0x723372b8 )
  322.     ROM_LOAD_WIDE_SWAP( "jst-06m", 0x0480000, 0x400000, 0x4248988e )
  323.     ROM_LOAD_WIDE_SWAP( "jst-07m", 0x0880000, 0x400000, 0xc84c5a16 )
  324.     ROM_LOAD_WIDE_SWAP( "jst-08m", 0x0c80000, 0x400000, 0x791b57f3 )
  325.     ROM_LOAD_WIDE_SWAP( "jst-09m", 0x1080000, 0x400000, 0x6df42048 )
  326.     ROM_LOAD_WIDE_SWAP( "jst-10m", 0x1480000, 0x400000, 0xd7e22769 )
  327.     ROM_LOAD_WIDE_SWAP( "jst-11m", 0x1880000, 0x400000, 0x0a033ac5 )
  328.     ROM_LOAD_WIDE_SWAP( "jst-12m", 0x1c80000, 0x400000, 0x43bd2ddd )
  329.     ROM_LOAD_WIDE_SWAP( "jst-13m", 0x2080000, 0x400000, 0x6b443235 )
  330.  
  331.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  332.     ROM_LOAD( "jst-02",  0x00000, 0x08000, 0x7809e2c3 )
  333.     ROM_CONTINUE(        0x10000, 0x18000 )
  334.     ROM_LOAD( "jst-03",  0x28000, 0x20000, 0x860ff24d )
  335.  
  336.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  337.     ROM_LOAD( "jst-01m", 0x0000000, 0x400000, 0x9a7c98f9 )
  338. ROM_END
  339.  
  340. ROM_START( sfex )
  341.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  342.     ROM_LOAD_WIDE_SWAP( "sfe-04a", 0x0000000, 0x080000, 0x08247bd4 )
  343.     ROM_LOAD_WIDE_SWAP( "sfe-05m", 0x0080000, 0x400000, 0xeab781fe )
  344.     ROM_LOAD_WIDE_SWAP( "sfe-06m", 0x0480000, 0x400000, 0x999de60c )
  345.     ROM_LOAD_WIDE_SWAP( "sfe-07m", 0x0880000, 0x400000, 0x76117b0a )
  346.     ROM_LOAD_WIDE_SWAP( "sfe-08m", 0x0c80000, 0x400000, 0xa36bbec5 )
  347.     ROM_LOAD_WIDE_SWAP( "sfe-09m", 0x1080000, 0x400000, 0x62c424cc )
  348.     ROM_LOAD_WIDE_SWAP( "sfe-10m", 0x1480000, 0x400000, 0x83791a8b )
  349.  
  350.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  351.     ROM_LOAD( "sfe-02",  0x00000, 0x08000, 0x1908475c )
  352.     ROM_CONTINUE(        0x10000, 0x18000 )
  353.     ROM_LOAD( "sfe-03",  0x28000, 0x20000, 0x95c1e2e0 )
  354.  
  355.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  356.     ROM_LOAD( "sfe-01m", 0x0000000, 0x400000, 0xf5afff0d )
  357. ROM_END
  358.  
  359. ROM_START( sfexj )
  360.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  361.     ROM_LOAD_WIDE_SWAP( "sfe-04j", 0x0000000, 0x080000, 0xea100607 )
  362.     ROM_LOAD_WIDE_SWAP( "sfe-05m", 0x0080000, 0x400000, 0xeab781fe )
  363.     ROM_LOAD_WIDE_SWAP( "sfe-06m", 0x0480000, 0x400000, 0x999de60c )
  364.     ROM_LOAD_WIDE_SWAP( "sfe-07m", 0x0880000, 0x400000, 0x76117b0a )
  365.     ROM_LOAD_WIDE_SWAP( "sfe-08m", 0x0c80000, 0x400000, 0xa36bbec5 )
  366.     ROM_LOAD_WIDE_SWAP( "sfe-09m", 0x1080000, 0x400000, 0x62c424cc )
  367.     ROM_LOAD_WIDE_SWAP( "sfe-10m", 0x1480000, 0x400000, 0x83791a8b )
  368.  
  369.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  370.     ROM_LOAD( "sfe-02",  0x00000, 0x08000, 0x1908475c )
  371.     ROM_CONTINUE(        0x10000, 0x18000 )
  372.     ROM_LOAD( "sfe-03",  0x28000, 0x20000, 0x95c1e2e0 )
  373.  
  374.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  375.     ROM_LOAD( "sfe-01m", 0x0000000, 0x400000, 0xf5afff0d )
  376. ROM_END
  377.  
  378. ROM_START( sfexp )
  379.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  380.     ROM_LOAD_WIDE_SWAP( "sfp-04e", 0x0000000, 0x080000, 0x305e4ec0 )
  381.     ROM_LOAD_WIDE_SWAP( "sfp-05",  0x0080000, 0x400000, 0xac7dcc5e )
  382.     ROM_LOAD_WIDE_SWAP( "sfp-06",  0x0480000, 0x400000, 0x1d504758 )
  383.     ROM_LOAD_WIDE_SWAP( "sfp-07",  0x0880000, 0x400000, 0x0f585f30 )
  384.     ROM_LOAD_WIDE_SWAP( "sfp-08",  0x0c80000, 0x400000, 0x65eabc61 )
  385.     ROM_LOAD_WIDE_SWAP( "sfp-09",  0x1080000, 0x400000, 0x15f8b71e )
  386.     ROM_LOAD_WIDE_SWAP( "sfp-10",  0x1480000, 0x400000, 0xc1ecf652 )
  387.  
  388.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  389.     ROM_LOAD( "sfe-02",  0x00000, 0x08000, 0x1908475c )
  390.     ROM_CONTINUE(        0x10000, 0x18000 )
  391.     ROM_LOAD( "sfe-03",  0x28000, 0x20000, 0x95c1e2e0 )
  392.  
  393.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  394.     ROM_LOAD( "sfe-01m", 0x0000000, 0x400000, 0xf5afff0d )
  395. ROM_END
  396.  
  397. ROM_START( sfexpj )
  398.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  399.     ROM_LOAD_WIDE_SWAP( "sfp-04j", 0x0000000, 0x080000, 0x18d043f5 )
  400.     ROM_LOAD_WIDE_SWAP( "sfp-05",  0x0080000, 0x400000, 0xac7dcc5e )
  401.     ROM_LOAD_WIDE_SWAP( "sfp-06",  0x0480000, 0x400000, 0x1d504758 )
  402.     ROM_LOAD_WIDE_SWAP( "sfp-07",  0x0880000, 0x400000, 0x0f585f30 )
  403.     ROM_LOAD_WIDE_SWAP( "sfp-08",  0x0c80000, 0x400000, 0x65eabc61 )
  404.     ROM_LOAD_WIDE_SWAP( "sfp-09",  0x1080000, 0x400000, 0x15f8b71e )
  405.     ROM_LOAD_WIDE_SWAP( "sfp-10",  0x1480000, 0x400000, 0xc1ecf652 )
  406.  
  407.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  408.     ROM_LOAD( "sfe-02",  0x00000, 0x08000, 0x1908475c )
  409.     ROM_CONTINUE(        0x10000, 0x18000 )
  410.     ROM_LOAD( "sfe-03",  0x28000, 0x20000, 0x95c1e2e0 )
  411.  
  412.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  413.     ROM_LOAD( "sfe-01m", 0x0000000, 0x400000, 0xf5afff0d )
  414. ROM_END
  415.  
  416. ROM_START( sfex2 )
  417.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  418.     ROM_LOAD_WIDE_SWAP( "ex2j-04", 0x0000000, 0x080000, 0x5d603586 )
  419.     ROM_LOAD_WIDE_SWAP( "ex2-05m", 0x0080000, 0x800000, 0x78726b17 )
  420.     ROM_LOAD_WIDE_SWAP( "ex2-06m", 0x0880000, 0x800000, 0xbe1075ed )
  421.     ROM_LOAD_WIDE_SWAP( "ex2-07m", 0x1080000, 0x800000, 0x6496c6ed )
  422.     ROM_LOAD_WIDE_SWAP( "ex2-08m", 0x1880000, 0x800000, 0x3194132e )
  423.     ROM_LOAD_WIDE_SWAP( "ex2-09m", 0x2080000, 0x400000, 0x075ae585 )
  424.  
  425.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  426.     ROM_LOAD( "ex2-02",  0x00000, 0x08000, 0x9489875e )
  427.     ROM_CONTINUE(        0x10000, 0x18000 )
  428.  
  429.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  430.     ROM_LOAD( "ex2-01m", 0x0000000, 0x400000, 0x14a5bb0e )
  431. ROM_END
  432.  
  433. ROM_START( sfex2p )
  434.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  435.     ROM_LOAD_WIDE_SWAP( "sf2p-04", 0x0000000, 0x080000, 0xc6d0aea3 )
  436.     ROM_LOAD_WIDE_SWAP( "sf2p-05", 0x0080000, 0x800000, 0x4ee3110f )
  437.     ROM_LOAD_WIDE_SWAP( "sf2p-06", 0x0880000, 0x800000, 0x4cd53a45 )
  438.     ROM_LOAD_WIDE_SWAP( "sf2p-07", 0x1080000, 0x800000, 0x11207c2a )
  439.     ROM_LOAD_WIDE_SWAP( "sf2p-08", 0x1880000, 0x800000, 0x3560c2cc )
  440.     ROM_LOAD_WIDE_SWAP( "sf2p-09", 0x2080000, 0x800000, 0x344aa227 )
  441.     ROM_LOAD_WIDE_SWAP( "sf2p-10", 0x2880000, 0x800000, 0x2eef5931 )
  442.  
  443.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  444.     ROM_LOAD( "sf2p-02", 0x00000, 0x08000, 0x3705de5e )
  445.     ROM_CONTINUE(        0x10000, 0x18000 )
  446.     ROM_LOAD( "sf2p-03", 0x28000, 0x20000, 0x6ae828f6 )
  447.  
  448.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  449.     ROM_LOAD( "ex2-01m", 0x0000000, 0x400000, 0x14a5bb0e )
  450. ROM_END
  451.  
  452. ROM_START( tgmj )
  453.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  454.     ROM_LOAD_WIDE_SWAP( "ate-04j", 0x0000000, 0x080000, 0xbb4bbb96 )
  455.     ROM_LOAD_WIDE_SWAP( "ate-05",  0x0080000, 0x400000, 0x50977f5a )
  456.     ROM_LOAD_WIDE_SWAP( "ate-06",  0x0480000, 0x400000, 0x05973f16 )
  457.  
  458.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  459.     ROM_LOAD( "ate-02",  0x00000, 0x08000, 0xf4f6e82f )
  460.     ROM_CONTINUE(        0x10000, 0x18000 )
  461.  
  462.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  463.     ROM_LOAD( "ate-01",  0x0000000, 0x400000, 0xa21c6521 )
  464. ROM_END
  465.  
  466. ROM_START( ts2j )
  467.     ROM_REGION( CODE_SIZE, REGION_CPU1 )
  468.     ROM_LOAD_WIDE_SWAP( "ts2j-04", 0x0000000, 0x080000, 0x4aba8c5e )
  469.     ROM_LOAD_WIDE_SWAP( "ts2-05",  0x0080000, 0x400000, 0x7f4228e2 )
  470.     ROM_LOAD_WIDE_SWAP( "ts2-06m", 0x0480000, 0x400000, 0xcd7e0a27 )
  471.     ROM_LOAD_WIDE_SWAP( "ts2-08m", 0x0880000, 0x400000, 0xb1f7f115 )
  472.     ROM_LOAD_WIDE_SWAP( "ts2-10",  0x0c80000, 0x200000, 0xad90679a )
  473.  
  474.     ROM_REGION( 0x50000, REGION_CPU2 ) /* 64k for the audio CPU (+banks) */
  475.     ROM_LOAD( "ts2-02",  0x00000, 0x08000, 0x2f45c461 )
  476.     ROM_CONTINUE(        0x10000, 0x18000 )
  477.  
  478.     ROM_REGION( 0x400000, REGION_SOUND1 | REGIONFLAG_SOUNDONLY ) /* Q Sound Samples */
  479.     ROM_LOAD( "ts2-01",  0x0000000, 0x400000, 0xd7a505e0 )
  480. ROM_END
  481.  
  482.  
  483. GAME( 1995, ts2j,     0,        zn, zn, 0, ROT0, "Capcom/Takara", "Battle Arena Toshinden 2 (JAPAN 951124)" )
  484. GAME( 1996, sfex,     0,        zn, zn, 0, ROT0, "Capcom/Arika", "Street Fighter EX (ASIA 961219)" )
  485. GAME( 1996, sfexj,    sfex,     zn, zn, 0, ROT0, "Capcom/Arika", "Street Fighter EX (JAPAN 961130)" )
  486. GAME( 1997, sfexp,    0,        zn, zn, 0, ROT0, "Capcom/Arika", "Street Fighter EX Plus (USA 970311)" )
  487. GAME( 1997, sfexpj,   sfexp,    zn, zn, 0, ROT0, "Capcom/Arika", "Street Fighter EX Plus (JAPAN 970311)" )
  488. GAME( 1997, rvschool, 0,        zn, zn, 0, ROT0, "Capcom", "Rival Schools (ASIA 971117)" )
  489. GAME( 1997, jgakuen,  rvschool, zn, zn, 0, ROT0, "Capcom", "Justice Gakuen (JAPAN 971117)" )
  490. GAME( 1998, sfex2,    0,        zn, zn, 0, ROT0, "Capcom/Arika", "Street Fighter EX 2 (JAPAN 980312)" )
  491. GAME( 1998, tgmj,     0,        zn, zn, 0, ROT0, "Capcom/Akira", "Tetris The Grand Master (JAPAN 980710)" )
  492. GAME( 1999, sfex2p,   sfex2,    zn, zn, 0, ROT0, "Capcom/Arika", "Street Fighter EX 2 Plus (JAPAN 990611)" )
  493.